const express = require('express'); // Для сервера
const bodyParser = require("body-parser"); // Для парсинга JSON-данных в запросах
const cors = require('cors'); // CORS политика
const cookieParser = require("cookie-parser");// Для работы с куки
const rateLimit = require('express-rate-limit'); // От DDos
const helmet = require('helmet'); // Защита заголовков
const session = require('express-session'); // сессионное хранилище

require('dotenv').config(); // Что б переменные секретные брать
const app = express(); // Для сервера
const port = process.env.PORT || 3001; // Либо порт в секретной переменной либо 3001

const router = require('./routes/router'); // Импорт маршрутов

app.set('trust proxy', 1);

const limiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 15 минут
    max: 100, // ограничьте каждый IP до 100 запросов за окно
    trustProxy: true // важно, если ваше приложение находится за прокси-сервером
});
app.use(limiter);
app.use(helmet()); // Защита заголовков
app.use(cookieParser()); // Для работы с куки
app.use(cors()); //  Для доступа запросов из вне CORS
app.use(session({
    secret: process.env.SESSION_SECRET, // Используйте безопасный секретный ключ
    resave: false,
    saveUninitialized: false,
    cookie: {
        maxAge: 10 * 60 * 1000 // 10 минут продолжительности сеанса
    }
}));
app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "http://localhost:4200");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
}); // Добавление заголовков
app.use(bodyParser.urlencoded({ extended: true })); // Для использования тела запроса
app.use(express.json()); // Для парсинга JSON-данных в запросах

app.use(router); // Маршруты

app.listen(port, () => {
    console.log('Сервер запущен на порту http://localhost:' + port);
});